home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.asm.Label;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Environment;
- import sun.tools.java.Identifier;
- import sun.tools.java.Type;
-
- public class Statement extends Node {
- public static final long DEAD_END = 1L << 63;
- Identifier[] labels;
-
- Statement(int var1, int var2) {
- super(var1, var2);
- }
-
- public void setLabel(Environment var1, Expression var2) {
- if (var2.op == 60) {
- if (this.labels == null) {
- this.labels = new Identifier[1];
- } else {
- Identifier[] var3 = new Identifier[this.labels.length + 1];
- System.arraycopy(this.labels, 0, var3, 1, this.labels.length);
- this.labels = var3;
- }
-
- this.labels[0] = ((IdentifierExpression)var2).id;
- } else {
- var1.error(var2.where, "invalid.label");
- }
- }
-
- public long checkMethod(Environment var1, Context var2, long var3, Hashtable var5) {
- var3 = this.check(var1, var2, var3, var5);
- if (!var2.field.getType().getReturnType().isType(11) && (var3 & DEAD_END) == 0L) {
- var1.error(var2.field.getWhere(), "return.required.at.end", var2.field);
- }
-
- return var3;
- }
-
- long checkDeclaration(Environment var1, Context var2, long var3, int var5, Type var6, Hashtable var7) {
- throw new CompilerError("checkDeclaration");
- }
-
- long check(Environment var1, Context var2, long var3, Hashtable var5) {
- throw new CompilerError("check");
- }
-
- long reach(Environment var1, long var2) {
- if ((var2 & DEAD_END) != 0L) {
- if (var1.warnings()) {
- var1.error(super.where, "stat.not.reached");
- }
-
- var2 &= ~DEAD_END;
- }
-
- return var2;
- }
-
- public Statement inline(Environment var1, Context var2) {
- return this;
- }
-
- public Statement eliminate(Environment var1, Statement var2) {
- if (var2 != null && this.labels != null) {
- Statement[] var3 = new Statement[]{(Statement)var2};
- var2 = new CompoundStatement(super.where, var3);
- ((Statement)var2).labels = this.labels;
- }
-
- return (Statement)var2;
- }
-
- public void code(Environment var1, Context var2, Assembler var3) {
- throw new CompilerError("code");
- }
-
- void codeFinally(Environment var1, Context var2, Assembler var3, Context var4, Type var5) {
- Integer var6 = null;
- boolean var7 = false;
- boolean var8 = false;
-
- for(Context var9 = var2; var9 != null && var9 != var4; var9 = var9.prev) {
- if (var9.node != null) {
- if (var9.node.op == 126) {
- var7 = true;
- } else if (var9.node.op == 103) {
- var7 = true;
- FinallyStatement var10 = (FinallyStatement)var9.node;
- if (!var10.finallyFinishes) {
- var8 = true;
- break;
- }
- }
- }
- }
-
- if (var7) {
- if (var5 != null) {
- ClassDefinition var13 = var2.field.getClassDefinition();
- if (!var8) {
- LocalField var11 = new LocalField(super.where, var13, 0, var5, (Identifier)null);
- var6 = new Integer(var2.declare(var1, var11));
- var3.add(super.where, 54 + var5.getTypeCodeOffset(), var6);
- } else {
- switch (var13.getType().getTypeCode()) {
- case 5:
- case 7:
- var3.add(super.where, 88);
- case 11:
- break;
- default:
- var3.add(super.where, 87);
- }
- }
- }
-
- for(Context var14 = var2; var14 != null && var14 != var4; var14 = var14.prev) {
- if (var14.node != null) {
- if (var14.node.op == 126) {
- var3.add(super.where, 168, ((CodeContext)var14).contLabel);
- } else if (var14.node.op == 103) {
- FinallyStatement var15 = (FinallyStatement)var14.node;
- Label var12 = ((CodeContext)var14).contLabel;
- if (!var15.finallyFinishes) {
- var3.add(super.where, 167, var12);
- break;
- }
-
- var3.add(super.where, 168, var12);
- }
- }
- }
-
- if (var6 != null) {
- var3.add(super.where, 21 + var5.getTypeCodeOffset(), var6);
- }
-
- }
- }
-
- public boolean hasLabel(Identifier var1) {
- Identifier[] var2 = this.labels;
- if (var2 != null) {
- int var3 = var2.length;
-
- while(true) {
- --var3;
- if (var3 < 0) {
- break;
- }
-
- if (var2[var3].equals(var1)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- public boolean firstConstructor() {
- return false;
- }
-
- public Statement copyInline(Context var1, boolean var2) {
- return (Statement)((Node)this).clone();
- }
-
- public int costInline(int var1) {
- return var1;
- }
-
- void printIndent(PrintStream var1, int var2) {
- for(int var3 = 0; var3 < var2; ++var3) {
- var1.print(" ");
- }
-
- }
-
- public void print(PrintStream var1, int var2) {
- if (this.labels != null) {
- int var3 = this.labels.length;
-
- while(true) {
- --var3;
- if (var3 < 0) {
- break;
- }
-
- var1.print(this.labels[var3] + ": ");
- }
- }
-
- }
-
- public void print(PrintStream var1) {
- this.print(var1, 0);
- }
- }
-